/* web容器:
1. 100**详情全页面
     10000:登录+loading+首页
     10001:高危信号等
2. 101**详情小弹框
     10100:设备详情等
     10101:三维导航
     10102:巡检详情
     10103:隐患整改详情
     10104:天气气象站
     10105:天气小页面
     10106:视频对讲弹框
     10107:接受到报警跑马灯（语义识别）
     10110:语义识别筛选框
     10108:普通视频
     10116:预案处理详情
3. 102**子页面左(和首页公用左，为了减少CS端页面)
     10200:设备列表
     10201:维保左
     10202:接处警左
     10203:隐患左
     10204:巡检左
4. 103**子页面右(和首页公用右，为了减少CS端页面)
     10301:维保右
     10302:接处警右
     10303:隐患右
     10304:巡检右
5. 104**首页面
     10400:首页底部地图
     10401:多/单位左
     10402:多/单位右
     10403:多/单位下
6. 106**三维自绘框
     10600:系统加载loading页
     10601:测试中窗口
     10602:点击间隔提示框
     10603:系统错误提示框
     10604:关闭系统确认框
     10605:三维切换确认框
     10606:巡检路线图例
7. 107**按钮
     10700:三维工具框
     10701:热力图按钮
     10702:自动跟随按钮
     10703:清单试图按钮
     10704:隐患热力图按钮
     10705:时间试图按钮
     10706:二三维切换按钮
*/

import {
    getMarkDetail
} from '@/api/markInfo3d'

/* 一. 网页调CS端 */
// #1 打开三维,若为空，则不需要调用
//    重点：作用于主页面
function start3D(Info3d) { // string Info3d
    try {
        window.external.start3D(Info3d)
    } catch (e) {

    }
}

// #2飞行到具体位置, 定位
//   重点：作用于主页面，列表页面
function openFlight(info3d) { // info3d: 3d信息，json字符串
    try {
        window.external.openFlight(info3d)
    } catch (e) {

    }
}

// #3   隐藏三维.
// 重点：作用于主页面
function hide3D() {
    try {
        window.external.hide3D()
    } catch (e) {

    }
}

// #4   显示三维.
// 重点：作用于主页面
function disPlay3d() {
    try {
        window.external.disPlay3d()
    } catch (e) {

    }
}

// #5   显示基本标注信息，带状态的(数据Base64加密)
// signs:平台三维基本信息
/* type 标注类型
  1000000：单位
  1012000：球机
  1012001：枪机
  1012002：探测器
  1012003：烟感
  1012004：消火栓
  1012005：消防水池
  1012006：电气火灾
  1012007：天然水源
  1012008：可燃气体
  1012009：有毒气体
  1012010：温度传感器
  1012011：消防水箱
  1012012：巡检人物
  1012013：消防车
  1012014：三轮消防车
  1012015：观光车
  1012017：巡检点位
  data 标注类型数据集合
  id 标注唯一编码
  name 标注名称
  status 标注点状态 0 正常 10 报警 20 故障 30 屏蔽 40 联动
  info3d 3d信息，json字符串
  val 若为单位，此字段，标识单位安全系数分值，是百分比时是维保完成度
  若为视频，此字段，标识视频是否为视频分析探头，0：否，1：是
  若为巡检点位，此字段，标识 0：正常，1：未巡检  2: 已巡检
  若为隐患，此字段为隐患图片
  重点：作用于主页面 */
function info3dMark(signs) {
    try {
        window.external.info3dMark(signs)
    } catch (e) {

    }
}

// #5  设置菜单显示类型及顺序
/* 设置菜单显示类型及顺序
menu3DTypes:菜单显示类型及顺序，如： "1000000,1012000,1012002,1012003,1012004,1012005"
1000000：单位
1012000：视频
1012002：探测器
1012003：烟感
1012004：消火栓
1012005：消防水池
1012006：电气火灾
1012007：天然水源
1012008：可燃气体
1012009：有毒气体
1012010：温度传感器
1012011：消防水箱
1012013：消防车
1012017：巡检点位
basicTypes:基本配置项集合，如： "10105,10106"
10105.天气
10106.天气明细，此功能基于10105，点开后的弹框明细
*/
function menuGroups(menu3DTypes, basicTypes) { // （string menu3DTypes，string basicTypes）
    try {
        window.external.menuGroups(menu3DTypes, basicTypes)
    } catch (e) {

    }
}

// #6   警情推送,单位分值发生变化也调用这个
/* id 标注唯一编码
name 标注名称
type 标注类型
val:
  单位安全：系数分值，，
  警情：为警情个数，
  隐患：fbsId":2262,
    "id":332,
    "picUrls":"/app/1571917998162.png",
    "status":1
status 标注点状态 0 正常 10 报警 20 故障 30 屏蔽 40 联动
info3d 3d信息，json字符串
重点：作用于主页面 */
function policePush(id, name, type, val, status, info3d) { // int id,string name,int type,string val,int status,string info3d
    try {
        window.external.policePush(parseInt(id), name, parseInt(type), val, parseInt(status), info3d)
    } catch (e) {

    }
}

// #7   初始化播放视频
/* orgId：联网单位id
orgName：联网单位名称
auths：视频认证信息
isIinkYun：是否易消防云账号，1是0否
重点：作用于主页面 */
function presetVideo(orgId, orgName, auths, isIinkYun) { // string orgId, string orgName, string auths, int isIinkYun
    try {
        window.external.presetVideo(orgId ? orgId.toString() : '', orgName, auths, isIinkYun)
    } catch (e) {

    }
}

// #8   四路视频列表
/* cameras：六路视频信息列表
top: 配置页面起始点向左便宜10px X坐标
left：配置页面起始点向左便宜10p Y坐标
重点：作用于主页面 */
function showVideos(cameras, top, left) { // string cameras,int top,int left
    try {
        window.external.showVideos(cameras, top, left)
    } catch (e) {

    }
}

// #9   隐藏四路视频列表
// 重点：作用于主页面
function hideVideos() {
    try {
        window.external.hideVideos()
    } catch (e) {

    }
}

// #10   飞行到具体位置，消防车定位
/* id 消防车唯一编码
carNo 消防车车牌号
lon 消防车经度
lat 消防车纬度
alt 消防车高度
type 车辆类型 1012013：消防车, 1012014：三轮消防车, 1012015：观光车
重点：作用于列表页面 */
function fireCarFly(id, carNo, lon, lat, alt, type) { // int id,string carNo,string lon,string lat,string alt,int type
    try {
        window.external.fireCarFly(id, carNo, lon, lat, alt, type)
    } catch (e) {

    }
}

// #11   显示消防车分布
/* carInfo 消防车集合
 [
     {
  "id":12,
  "carNo":"消防车1",
  "lon":"12.2",
  "lat":"2.2",
  "alt":"2.3",
  "type":1
      }
    ]
 ```
id 消防车唯一编码
carNo 消防车车牌号
lon 消防车经度
lat 消防车纬度
alt 消防车高度
type 车辆类型 1012013：消防车, 1012014：三轮消防车, 1012015：观光车
说明: 3D菜单栏点击消防车，告诉WEB端，WEB端获取实时数据后，调用此接口返回3D进行加载
此处的经度、纬度是百度地图中获取的车辆定位数据转换成的china2000坐标系的经纬度
重点：作用于主页面 */
function fireSpread(carInfo) { // string carInfo
    try {
        window.external.fireSpread(carInfo)
    } catch (e) {

    }
}

// #12   警情推送配置信息修改
/* config 警情推送配置集合
[
     { " type":"401","name":"高危信号推送"，“switch”：“0”，"Mute":"0" }，
     {  " type":"402","name":"重大问题推送"，“switch”：“0”，"Mute":"1" }，
     {  " type":"403","name":"警情推送"，“switch”：“0”，"Mute":"1" }，
     { " type":"404","name":"隐患推送"，“switch”：“0”，"Mute":"0" }
    ]
 ```
  type 配置类型
  name 配置名称
  switch 是否开启 0 未开启 1 开启
  Mute   是否静音 0 未开启 1 开启
 说明:警情推送配置信息修改推送给CS端，CS端保存本地
  重点：配置页面 */
function configToC(config) { // string config
    try {
        window.external.configToC(config)
    } catch (e) {

    }
}

// #13   打开具体对象详情
/* objDeType：对象类型  见 web容器 编号
  objId: 对象编码
  objVal: 对象值，普通视频、烟火视频分析时，直接把cameres信息给它
  如：
  ```
  {
      "orgid":69,
      "cameraId":"1222",
      "name":"12号视频",
      "channel":"0",
      "type":1,
      "isIinkYun":1
  }
  ```
  orgid:联网单位id
  cameraId:播放的视频设备id
  name:设备名称
  channel:设备通道号
  type:设备类型
  isIinkYun:是否在线 1在线 0否
  对象值
  注：
   天气小弹框页面，页面双击事件调用此函数，打开天气详情页面等等
  重点：作用于主页面，列表页面，天气小弹框，各详情页面
  */
function openRelatedPages(objDeType, objId, objVal) { // int objDeType,string objId,string objVal
    try {
        window.external.openRelatedPages(objDeType, objId, objVal)
    } catch (e) {

    }
}

// #14 关闭具体详情
/* objDeType：对象类型  见 web容器 编号
    注：传0时关闭具体web容器 不为0时关闭特定web容器 */
// 重点：作用于各详情页面
function closeDetailsPage(objDeType) { // int objDeType
    try {
        window.external.closeDetailsPage(objDeType)
    } catch (e) {

    }
}

// #15   关闭系统
function closeSystem() {
    try {
        window.external.closeSystem()
    } catch (e) {

    }
}

// #16  打开系统提示
function systemTips(content, type) { // string content,string type
    try {
        window.external.systemTips(content, type)
    } catch (e) {

    }
}

/* #17
# 进入页面提示
type 0: 登录页面 默认
1：平台选择页面
2：平台首页
重点：作用于主页面，且只会调用一次
*/
function entryPageType(type) { // int type
    try {
        window.external.entryPageType(type)
        localStorage.setItem('ilinkBs_inClient', 1)
    } catch (e) {
        localStorage.setItem('ilinkBs_inClient', 0)
    }
}

/* #18
# # 首页窗口尺寸
 ```
     [
        {
          "type":"10400",
          "length":"0.3",
          "wide":"0.2",
         }
    ]
 ```
     type 页面容器编码
              10400:首页底部地图
             10401:多/单位左
             10402:多/单位右
             10403:多/单位下
     length 长度
     wide   宽度
  重点：作用于主页面
*/
function pageSetup(objSetup) { // string  objSetup
    try {
        window.external.pageSetup(objSetup)
    } catch (e) {

    }
}

/* #19
# # 切换地图类型
 ```type 地图类型 1.百度，2.蜂鸟，3.三维
  重点：作用于主页面
*/
function switchBsMap(type) { // int type
    try {
        window.external.switchBsMap(type)
    } catch (e) {

    }
}

/* #20
# # 三维工具点击事件
 ```type 工具类型
    1.测量距离
    2.测量高度
    3.测量面积
    4.清除测量数据
    5.飞往地球表面
    6.飞行到建筑物
    7.选择
    8.漫游
    9.漫游选择
    10.保存三维图片
    11.拷贝坐标
    12.加载飞行数据
    13.减速
    14.开始/暂停
    15.停止
    16.加速
    17.关闭所有效果
*/
function tooltype3d(type) { // int type
    try {
        window.external.tooltype3d(parseInt(type))
    } catch (e) {

    }
}

/* #21
# 播放警情音乐
 ```type 警情音乐类型 1.高危信号推送，2.重大问题推送，3.警情推送 ，4.隐患推送
*/
function playAudio(type) { // int type
    try {
        window.external.playAudio(parseInt(type))
    } catch (e) {

    }
}

/* #22
# 地图中按钮显示控制
 ```type 警情音乐类型 1.隐患按钮，2.维保巡查按钮，3.接处警按钮
*/
function disPlayBut(type) { // int type
    try {
        window.external.disPlayBut(parseInt(type))
    } catch (e) {

    }
}

/* #23
# 更新维保，巡检信息
equipmentInfo 维保，隐患信息
数据格式：
[
{
      "data":[
          {
              "info3d":"{'lon':117.116367454216,'lat':31.8219456866728,'alt':110.176568022929,'rotateX':0.0,'rotateY':0.0,'rotateZ':180.0,'zoomX':1.0,'zoomY':1.0,'zoomZ':1.0,'objProp':null,'viewLon':0.0,'viewLat':0.0,'viewAlt':0.0,'viewTilt':0.0,'viewHeading':0.0}",
              "id":464,
              "hiddenDetail":{
                  "fbsId":2261,
                  "id":322,
                  "picUrls":"resource/app/1571469567660.png",
                  "status":5
              }
          }
      ],
      "type":32
    }
  ]
  字段说明
    type 标注类型  22 巡检 33 维保
  id:三维标注信息唯一标识
  info3d：三维坐标信息
  status: 0 正常 10 报警 20 故障 30 屏蔽 40 联动 (巡检：0合格   10不合格点位   20未巡检)
  val: 若为维保,此字段为完成度（如98%，此值为0.98）
      若为单位，此字段，标识单位安全系数分值，
      若为隐患，此字段为隐患信息（picUrls：图片，status:隐患状态1:整改中、2:已完成，3:核实中，5:待指派）
*/
function liveUpdate(equipmentInfo) { // string equipmentInfo
    try {
        window.external.liveUpdate(equipmentInfo)
    } catch (e) {

    }
}

/* #24
# 标注图层显示隐藏
    menuType： 多图层用“,”隔开
    isShow： 是否显示  1 隐藏  2 显示
*/
function markersShowCtrl(menuType, isShow) { // string menuType, int isShow
    try {
        window.external.markersShowCtrl(menuType.toString(), isShow)
    } catch (e) {

    }
}

/* #25
#  查看周边
    infor3dDto： 中心点坐标。
    range： 范围。
*/
function ambitusLookup(infor3dDto, range) { // string infor3dDto, int range
    try {
        window.external.ambitusLookup(infor3dDto, range)
    } catch (e) {

    }
}

/* #26
#   控制Loading页面关闭显示
    type： 1为开启 ，2为关闭。
*/
function loadingControl(type) { // int type
    try {
        window.external.loadingControl(type)
    } catch (e) {

    }
}

/* #27
#   显示呼叫位置
    infor3dDto： 中心点坐标。
    imageURL： 范围。
*/
function callLocation(infor3dDto, imageURL) { // string infor3dDto, string imageURL
    try {
        window.external.callLocation(infor3dDto, imageURL)
    } catch (e) {

    }
}

/* #28
#   提示CS端版本有升级
*/
function upgradeToCs() {
    try {
        window.external.upgradeToCs()
    } catch (e) {

    }
}

/* #29
#   session断开，CS端跳转到登录页
*/
function upsessionToCs() {
    try {
        window.external.upsessionToCs()
    } catch (e) {

    }
}

/* #30
#   音视频通话录屏
    state： 0 开始 1结束
*/
function openRecordingScreen(state = 1) {
    try {
        window.external.openRecordingScreen(parseInt(state))
    } catch (e) {

    }
}
/* 二、基本功能（CS端调网页） */
/* #1  弹出页面，做到自适应
  objDeType：对象类型  见 web容器 编号
  objId：对象编码
  val：对象值
  注：客户端调用网页，调用样例 login(*,*)
  重点：作用于各详情面
*/
window.ejectRelevantPages = function (objDeType, objId, val) { // int objDeType ,string objId，string val
    let transVal = {}
    if (val && [10107].indexOf(objDeType) < 0) {
        transVal = JSON.parse(val.toString().replace(/'/gm, '"'))
    }
    if (objDeType === 10401) { // 首页>左
        if (objId === '40010') {
            window.FunList.alertUnitNum_ws && window.FunList.alertUnitNum_ws(transVal)
        } else if (objId === '40020') {
            window.FunList.highRiskFireCount_ws && window.FunList.highRiskFireCount_ws(transVal)
        } else if (objId === '40021') {
            window.FunList.importantCount_ws && window.FunList.importantCount_ws(transVal)
        } else if (objId === '40030') {
            window.FunList.orgsSafetyScore_ws && window.FunList.orgsSafetyScore_ws(transVal)
        } else if (objId === '40031') {
            window.FunList.sigeleOrgSafetyScore_ws && window.FunList.sigeleOrgSafetyScore_ws(transVal)
        } else if (objId === 'singleHome') { // 点击三维地图上标注物，进入单单位首页
            getMarkDetail({
                id: val,
                dType: 3
            }).then(res => {
                let data = res.data.data
                if (data) {
                    window.topVue.$Ctl.enterSingleHome({
                        orgId: data.orgId
                    })
                }
            })
        } else { // 以上是首页卡片推送
            window.FunList.changeLeftModelShow && window.FunList.changeLeftModelShow(objId, transVal)
        }
    } else if (objDeType === 10402) { // 首页>右
        if (objId === '40040') {
            window.FunList.cardCellCenter_ws && window.FunList.cardCellCenter_ws(transVal)
        } else if (objId === '40050') {
            window.FunList.pickUpPolice_ws && window.FunList.pickUpPolice_ws(transVal)
        } else if (objId === '40060') {
            window.FunList.orgsDailyInspect_ws && window.FunList.orgsDailyInspect_ws(transVal)
        } else if (objId === '40061') {
            window.FunList.sigeleOrgDailyInspect_ws && window.FunList.sigeleOrgDailyInspect_ws(transVal)
        } else if (objId === '40070') {
            window.FunList.hiddenDangerRectification_ws && window.FunList.hiddenDangerRectification_ws(transVal)
        } else if (objId === '40080') {
            window.FunList.fireWaterSupply_ws && window.FunList.fireWaterSupply_ws(transVal)
        } else if (objId === '40090') {
            window.FunList.electricalFire_ws && window.FunList.electricalFire_ws(transVal)
        } else if (objId === '40100') {
            window.FunList.fireMaintenance_ws && window.FunList.fireMaintenance_ws(transVal)
        } else { // 以上是首页卡片推送
            window.FunList.changeRightModelShow && window.FunList.changeRightModelShow(objId, transVal)
        }
    } else if (objDeType === 10001) { // 设备详情等全屏大页面
        if (!val && (objId === 'HiddenDangers' || objId === 'MaintenanceTimeLine')) { // 地图中的按钮直接触发页面显示事件
            // 记录到缓存中的路由数组
            let param = {
                'orgId': localStorage.getItem('ilinkBs_orgIds')
            }
            window.topVue.$Ctl.addRoutePage(objId, param)
            window.FunList.changeDetailModelShow && window.FunList.changeDetailModelShow(true, objId, param)
        } else {
            window.FunList.changeDetailModelShow && window.FunList.changeDetailModelShow(true, objId, transVal)
        }
    } else if (objDeType === 10100) { // 常规探测器小弹窗
        window.FunList.openCommonDialog && window.FunList.openCommonDialog('DeviceDetails', val ? transVal : {
            id: objId
        })
    } else if (objDeType === 10102) { // 巡检小弹窗
        window.FunList.openCommonDialog && window.FunList.openCommonDialog('PatrolPoint', {
            id: objId
        })
    } else if (objDeType === 10118) { // 消防车详情
        window.FunList.openCommonDialog && window.FunList.openCommonDialog('CarDetail', val ? transVal : {
            id: objId
        })
    } else if (objDeType === 10103) { // 隐患小弹窗
        window.FunList.openCommonDialog && window.FunList.openCommonDialog('HiddenDanger', {
            id: objId
        })
    } else if (objDeType === 10106) { // 音视频通话弹框
        if (typeof (transVal) === 'object') { // 打电话
            window.FunList.openCommonDialog && window.FunList.openCommonDialog('DialNumber', transVal)
        } else { // 切换音视频通话类型
            window.FunList.changeCellType && window.FunList.changeCellType(transVal)
        }
    } else if (objDeType === 10101) { // 三维导航
        getMarkDetail({
            id: transVal.id,
            dType: 3
        }).then(res => {
            let data = res.data
            if (data) {
                transVal.location = data.mapLocation
                window.FunList.openCommonDialog && window.FunList.openCommonDialog('Navigation', transVal)
            }
        })
    } else if (objDeType === 10107) { // 语音指令
        if (objId) { // 推送
            window.FunList.openPushAudio && window.FunList.openPushAudio(objId, val)
        } else { // 开关语音指令
            window.FunList.openAudioDiscern && window.FunList.openAudioDiscern(val)
        }
    } else if (objDeType === 10110) { // 语义识别
        if (objId) { // 设置弹框里识别结果
            window.FunList.setAudioDispose && window.FunList.setAudioDispose(transVal)
        } else { // 执行识别结果命令词识别结果
            window.FunList.excuteCmdResult && window.FunList.excuteCmdResult(transVal)
        }
    } else if (objDeType === 10108) { // 播放视频
        window.topVue.$Ctl.getVideoDetail(objId)
    } else if (objDeType === 10109) { // 查看周边
        window.FunList.openCommonDialog && window.FunList.openCommonDialog('Peripherals', transVal.hasOwnProperty('location') ? transVal : {
            location: JSON.stringify(transVal)
        })
    }
}

/* #2  告诉前端拨打本地配置信息
config 警情推送配置集合
 ```
  [
     { " type":"401","name":"高危信号推送"，“switch”：“0”，"Mute":"0" }，
     {  " type":"402","name":"重大问题推送"，“switch”：“0”，"Mute":"1" }，
     {  " type":"403","name":"警情推送"，“switch”：“0”，"Mute":"1" }，
     { " type":"404","name":"隐患推送"，“switch”：“0”，"Mute":"0" }
    ]
 ```
  type 配置类型
  name 配置名称
  switch 是否开启 0 未开启 1 开启
  Mute   是否静音 0 未开启 1 开启
 说明:CS端推送本地警情配置信息给web
  重点：配置页面
*/
window.setToConfigure = function (config) { // string config

}

/* #3  打开对象列表，如已打开则自动关闭，打开上次记录的类型，若已无记录，则关闭列表
  type 标注类型 见 web容器 编号
  重点：作用于列表页面
*/
window.openObjList = function () {

}

/* #4   告诉二维关闭三维
  重点：作用于主页面
*/
window.close3dToW = function () {

}

/* #5   诉二维关闭loading
  重点：作用于主页面
*/
window.closeLoadingToW = function () {

}

/* #6   闭打开系统提示
  重点：作用于主页面
*/
window.closeSystemTips = function () {

}

/* #7  # 3D加载成功通知
 */
window.load3dComplete = function () {
    window.topVue.$Ctl.intMapMarks()
}

/* #8   # 切换地图类型
  type 地图类型 1.百度，2.蜂鸟，3.三维
*/
window.switchMap = function (type) {
    window.FunList.initMap && window.FunList.initMap(type)
}

export default {
    start3D,
    openFlight,
    hide3D,
    disPlay3d,
    info3dMark,
    menuGroups,
    policePush,
    presetVideo,
    showVideos,
    hideVideos,
    fireCarFly,
    fireSpread,
    configToC,
    openRelatedPages,
    closeDetailsPage,
    closeSystem,
    systemTips,
    entryPageType,
    pageSetup,
    switchBsMap,
    tooltype3d,
    playAudio,
    disPlayBut,
    liveUpdate,
    markersShowCtrl,
    ambitusLookup,
    loadingControl,
    callLocation,
    upgradeToCs,
    upsessionToCs,
    openRecordingScreen
}
